Computers have become an integral part of modern society. In fact, it is hard to image a day where we are not touched by computer related technology. Many applications for computers require a gateway or interface for humans and computers to interact. Through computer interfaces, humans can receive information processed by computers and/or instruct computers to perform tasks. The hardware aspect of interfaces include common input/output devices, such as keypads, pointer devices, monitors, printers, microphones, speakers, etc. Behind hardware is an electronic aspect which is driven and controlled by software.
The software that instructs a computer or microprocessor to perform tasks is called a program. One type of program is a function, which usually performs a particular service or a series of discrete tasks. For instance, a function named DISPLAY could instruct a computer to display a value on a monitor. Functions are typically compiled within a larger program or are compiled within a library or collection of functions. Generally, a function is invoked by calling the function. When a function is called, parameter values are typically passed to the function to tailor the task that the function will perform. For instance, the DISPLAY function could be passed the value MYNAME (a string containing my name), which would result in the computer displaying that particular name on the screen. Parameter values usually come in a variety of different types, such as pointers, integers, strings, etc. While some functions have no parameters (i.e. no parameter values can be passed to the function), many functions have a variety of parameters to tailor the execution of the tasks therein.
Languages typically require function calls to be in a specific syntax for the function to work properly. Traditionally, parameter values must be listed in a specific order so that the function will know which parameter in the function will be associated with which value. A function call of this type is sometimes referred to as being sequentially dependent. If the values are passed in the wrong order, the function will either crash due to incompatible value types or an unintentional outcome will result. Additionally, many function syntaxes require that values be passed for all the parameters recognized in the function, even if those values are null or default values. When preparing function calls with such syntax, the human user has the burden of remembering all of the parameters and their types for each of the functions the user wishes to call. In the case of sequentially dependent functions, the user must additionally remember the order of the parameters. As such, the task of handling and instructing the computer to execute functions can be complicated and potentially fraught with errors.
The development of functions has traditionally been inflexible and required extensive coordination. As indicated earlier, functions are typically compiled into a program or a library. Once compiled, any modification or addition of functions requires recompilation. Therefore, it is very desirable to have a complete software package that will not need modification after compilation. This is particularly challenging when a team of software developers are each creating a series of functions since all of the developers must coordinate their efforts to develop the desired programs or libraries.
Therefore, there is a need for a method and apparatus which overcomes the problems in traditional function calls and their implementation.